/*
 * @Author: wangshuixin 2412658453@qq.com
 * @Date: 2024-11-07 14:09:02
 * @LastEditors: wangshuixin 2412658453@qq.com
 * @LastEditTime: 2025-01-10 10:41:02
 * @FilePath: \sr_system_manager_ui\src\types\component.ts
 * @Description: 组件所用类型声明
 */

/**
 * 表格组件 >> 表头字段
*/
export interface TableColumnItem {
  title: string, // 标题
  dataIndex: string, // 列信息的标识
  visible?: boolean // 该列是否可见
  width?: number, // 占据宽度
  minWidth?: number, // 最小宽度
  required?: boolean, // 表头是否显示必填标识
  fixed?: string, // 固定位置
  slotName?: string, // 插槽名 - 确定需要使用时，才添加该属性，否则将覆盖默认文本，显示为空白
  tooltip?: boolean, // 是否使用“...”省略超出长度的文本，同时显示气泡提示文字
  label?: string, // 标题 >> 用于列数据显隐
  key?: string, // 列信息的标识 >> 用于列数据显隐
  disabled?: boolean // 是否允许用户操作 >> 用于列数据显隐
  sortable?: boolean, // 是否可筛选，true时，列可排序；custom时，表示用户自定义排序逻辑；
  sortOrders?: Array<string[]>, // 定义排序的顺序 ['descending', 'ascending']
  [property: string]: any
}

/**
 * 下拉选择框可选数据行
*/
export interface SelectComponentDataDTO {
  title?: string, // 显示文字
  value?: string|number|boolean, // 勾选时需要回显的值
  [property: string]: any
}

/**
 * 搜索条件组件的配置，需要的数据类型
*/
export interface ComponentDataDTO {
  previewStyle?: { [key: string]: string | number }, // 预览状态下，组件的样式；【索引签名的语法】
  editStyle?: { [key: string]: string | number }, // 编辑状态下，组件的样式；其类型是一个包含任意字符串键和字符串或数字值的对象
  rowTextStyle?: { [key: string]: string | number }, // 预览状态下，内容区域的样式。支持组件的类型type：0 input输入框或textarea输入框；-1 input-number输入框 1 下拉勾选框；2 日期选择组件；3 纯文本显示。
  options?: SelectComponentDataDTO[], // 下拉选择框的可选数据
  showTip?: boolean, // 上传附件type：5，是否显示提示，默认不提示
  specificRequirement?: string, // 上传附件type：5，具体要求；
  desc?: string, // 描述信息；
  descStyle?: { [key: string]: string | number } // 描述信息的样式；
  multiple?: boolean, // 下拉选择框是否多选
  rules?: object, // 校验表单的规则
  type?: string, // 当日期选择组件时：代表组件的日期选择类型；当input组件时：textarea、text和其他 原生 input 的 type 值
  readonly?: boolean, // 仅读
  imageList?: string[], // 图片列表
  filterable?: boolean, // 是否可搜索 >> select下拉框
  allowCreate?: boolean, // 是否允许用户创建新条目，需配合 filterable 使用
  defaultFirstOption?: boolean, // 在输入框按下回车，选择第一个匹配项。需配合 filterable 或 remote 使用
  min?: number, // input-number 设置计数器允许的最小值
  max?: number, // input-number 设置计数器允许的最大值
  step?: number, // input-number 计数器步长
  stepStrictly?: boolean, // input-number 是否只能输入 step 的倍数
  precision?: number, // input-number 数值精度
  controls?: boolean, // input-number 是否使用控制按钮
  maxLength?: number, // 原生属性，最大输入长度
  showWordLimit?: boolean, // 是否显示输入字数统计，input输入框只在 type = "text" 或 type = "textarea" 时有效
  list?: SheetInfoComponent[], // 组件类型type 99 多个自定义组件时，此处为组件数组；
  suffix?: string, // input-number 后缀名
  sheetInfoLabelLineHeight?: string, // 表单title行间距
  sheetInfoLabelHeight?: string // 表单title的高度
  sheetInfoRowMarginTop?: string, // 表单row行数据，marginTop与顶部的距离
  sheetInfoRowLineHeight?: string, // 表单row行数据的lineHeight行间距
  startPlaceholder?: string, // 搜索条件组件 type2 >> 开始时间占位符
  endPlaceholder?: string, // 搜索条件组件 type2 >> 结束时间占位符
  [property: string]: any
}

/**
 * 搜索条件组件 >> 传入参数，用于生成对应的搜索组件
*/
export interface SearchBarComponent {
  type: number, // 组件的类型：0 搜索框；1 下拉勾选框；2 日期选择组件；
  key: string, // 搜索条件的绑定字段
  cValue?: string|number, // 组件传入值，用于回显
  width?: string, // 组件宽度
  placeholder?: string, // 占位符
  config?: ComponentDataDTO, // 组件的使用配置（传入组件的可选数据）
  [property: string]: any
}

/**
 * 成果信息 >> 传入参数，用于生成对应的搜索组件
*/
export interface SheetInfoComponent {
  title: string, // 组件标题
  type: number, // 组件的类型：0 input输入框或textarea输入框；-1 input-number输入框 1 下拉勾选框；2 日期选择组件；3 纯文本显示 4 按钮单选器；5 附件；6 插槽；99 多个自定义组件；
  key: string, //表单的绑定字段
  cValue?: string | number | boolean | string[] | undefined, // 组件传入值，用于回显
  hidden?: boolean, // 是否隐藏组件
  placeholder?: string, // 占位符
  labelWidth?: string, // 表单title所占宽度，单位px
  labelPosition?: 'left' | 'right', // 表单title的对齐方式
  width?: string, // 组件宽度（除type：4 单选选择器）
  depended?: string, // 组件依赖参数，该参数有值，依赖组件才能操作
  config?: ComponentDataDTO, // 组件的使用配置（传入组件的可选数据）
  [property: string]: any
}

export enum SheetInfoFormTypeEnum {
  text = 3, //  纯文本显示
  inputOrTextArea = 0 , //  input输入框或textarea输入框
  inputNumber = -1, //  input-number输入框
  select = 1, //  下拉勾选框
  datePick = 2, //  日期选择组件
  radio = 4,  //  按钮单选器
  file = 5, //  附件
  otherMore = 99, //  多个自定义组件
}